#include<bits/stdc++.h>
using namespace std;
char ma[105][105];
int vis[105][105]={0},m,n,dx[8]={1,1,1,0,0,-1,-1,-1},dy[8]={-1,0,1,-1,1,-1,0,1};
bool out_of_edge(int x,int y){
	if(x>0&&x<=m&&y>0&&y<=n) return 0;
	return 1; 
}
void find(int x,int y){
	if(out_of_edge(x,y)||ma[x][y]=='*') return;
	for(int i=0;i<8;i++){
		if(ma[x+dx[i]][y+dy[i]]=='@'&&!vis[x+dx[i]][y+dy[i]]){
			vis[x+dx[i]][y+dy[i]]=1;
			find(x+dx[i],y+dy[i]);
		}
	}
	return;
}
int cnt_boom(int x,int y,int cnt){
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(ma[i][j]=='@'&&!vis[i][j]){
				cnt++;
				vis[i][j]=1;
				find(i,j);
			}
			vis[i][j]=1;
		}
	}
	return cnt;
}
int main(){
	while(~scanf("%d%d",&m,&n)){
		if(m==0) break;
		for(int i=1;i<=m;i++){
			for(int j=1;j<=n;j++){
				cin>>ma[i][j];
			}
		}
		int cnt=cnt_boom(1,1,0);
		printf("%d\n",cnt);
		for(int i=1;i<=m;i++){
			for(int j=1;j<=n;j++){
				vis[i][j]=0;
			}
		}
	}
	return 0;
}
